//////////////////////////////////////////////////////////////////////////

#ifndef _TIMER_H_
#include "timer.h"
#endif

//////////////////////////////////////////////////////////////////////////

#ifndef _BOOSTSERVICE_H_
#include "boostservice.h"
#endif

#include <boost/date_time/posix_time/posix_time.hpp>

//////////////////////////////////////////////////////////////////////////


Timer::~Timer()
{
}


//////////////////////////////////////////////////////////////////////////


void Timer::Start()
{
    Reset();
}


//////////////////////////////////////////////////////////////////////////


void Timer::Pause()
{
    // Not implemented yet
}


//////////////////////////////////////////////////////////////////////////


void Timer::Reset()
{
    m_Begin = GetCurrTime();
}


//////////////////////////////////////////////////////////////////////////


size_t Timer::Milliseconds() const
{
    return GetCurrTime() - m_Begin;
}


//////////////////////////////////////////////////////////////////////////


void Timer::Sleep( size_t _milliseconds )
{
    boost::asio::deadline_timer timer( BoostService::GetIOService() );

    // Set timer expiry time
    timer.expires_from_now( boost::posix_time::milliseconds(_milliseconds) );

    // Blocking wait
    timer.wait();
}


//////////////////////////////////////////////////////////////////////////


size_t Timer::GetCurrTime()
{
    boost::posix_time::ptime now = boost::posix_time::microsec_clock::local_time();
    return static_cast<size_t>( now.time_of_day().total_milliseconds() );
}


//////////////////////////////////////////////////////////////////////////
